home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / sbin / update-intel-microcode < prev    next >
Encoding:
Text File  |  2009-10-07  |  2.4 KB  |  76 lines

  1. #!/bin/sh
  2. # Copyright (c) 2008 by Giacomo A. Catenazzi <cate@debian.org>
  3. # This file is licensed with GPL version 2 (or at your option any later versions)
  4. # For the full license, see http://fsf.org
  5.  
  6. set -e
  7.  
  8. # This script will download and update the Intel microcode
  9.  
  10. # Check wget
  11. if ! which wget > /dev/null 2> /dev/null; then
  12.     echo "wget not found. Please install wget" 1>&2
  13.     exit 1
  14. fi
  15. if ! grep -sq GenuineIntel /proc/cpuinfo; then
  16.     echo "microcode.ctl: Yet we provide only microcodes for Intel processors" 1>&2
  17.     echo "Your CPU seems not an Intel processor" 1>&2
  18.     exit 1
  19. fi
  20.  
  21. REMOTE_RSS='http://feeds.downloadcenter.intel.com/rss/?p=483&lang=eng'
  22. REMOTE_DATA="$(wget -t 2 -T 20 -nv -q -O - "$REMOTE_RSS" | perl -pe 's|^.+?<IntelDC:Type>Firmware</IntelDC:Type><IntelDC:Version>(20[0-9]*)</IntelDC:Version><IntelDC:Status>latest</IntelDC:Status>.+?<IntelDC:FileURL>([^<]*\1[^<]*)</IntelDC:FileURL>.*$|\1 \2\n|' - || echo 'ERROR')"
  23. if [ "0$REMOTE_DATA" = "0"  -o  "0$REMOTE_DATA" = "0ERROR" ] ; then
  24.     echo "Error: could not find remote data in $REMOTE_RSS" 1>&2
  25.     echo "...exiting" 1>&2
  26.     exit 1
  27. fi
  28. REMOTE_FILE=$(echo $REMOTE_DATA | sed -ne 's#^\(.*\) \(http://.*\)$#\2#p' -)
  29. REMOTE_DATE=$(echo $REMOTE_DATA | sed -ne 's#^\(.*\) \(http://.*\)$#\1#p' -)
  30.  
  31. LOCAL_DIR=/usr/share/misc
  32. LOCAL_FILE="$LOCAL_DIR/intel-microcode.dat"
  33.  
  34. if [ -f "$LOCAL_FILE" ] ; then
  35.     LOCAL_DATE=$(sed -ne 's#^/\*\(.*\)\*/.*$#\1#p' "$LOCAL_FILE" | head -n 1 | date "+%Y%m%d" -f - )
  36.     echo "Local version: $LOCAL_DATE"
  37.     echo "Remote version: $REMOTE_DATE"
  38.  
  39.     if [ "0$REMOTE_DATE" = "0" ] ; then
  40.     echo "could not extract the actual data of remote microcode"
  41.     exit 1
  42.     elif [ "0$REMOTE_DATE" -le "0$LOCAL_DATE" ] ; then
  43.     echo "No need to download a new microcode" 1>&2
  44.     exit 0
  45.     fi
  46. else
  47.     echo "Local version: (none)"
  48.     echo "Remote version: $REMOTE_DATE"
  49. fi
  50.  
  51. echo "Downloading a new version of microcode."
  52.  
  53. case "$REMOTE_FILE" in
  54.     *.tgz | *.tar.gz )    FILTER=" tar xzOf - " ;;
  55.     *.dat.gz )        FILTER=" gzip -cd " ;;
  56.     * )            FILTER=" cat - " ;;
  57. esac
  58.  
  59.  
  60. if wget -t 2 -T 20 -nv -q -O - "$REMOTE_FILE" | $FILTER > "$LOCAL_FILE".tmp ; then
  61.     mv "$LOCAL_FILE".tmp "$LOCAL_FILE"
  62.     echo "microcode downloaded sucessfully" 1>&2
  63. else
  64.     echo "Error on downloading the microcode." 1>&2
  65.     echo "Install microcode manually. (See /usr/share/doc/microcode.ctl/README.Debian)" 1>&2
  66.     exit 1
  67. fi
  68.  
  69. # load the new microcode
  70.  
  71.  
  72. if [ "-$1" != "--no-reload" ] ; then
  73.     /etc/init.d/microcode.ctl reload
  74. fi
  75.  
  76.